package com.server.rule.component.triple;


import java.util.List;

import org.jdom.Element;

import com.server.rule.data.Data;
import com.server.rule.data.ExceptionTypeData;
/**
 * Classe abstraite correspondant au condition des {@link RuleComposite}
 * @author queyroi
 *
 */
public abstract class Triple {
	
	
	/**
	 * Méthode récursive pour déterminer si la condition est vérifié
	 * @param data L'ensemble des données en entrée du système
	 * @return
	 * @throws ExceptionTypeData
	 */
	public abstract boolean match(Data data) throws ExceptionTypeData;
	/**
	 * Surcharge de la méthode equals()
	 * @param p la condition a comparer
	 * @return
	 */
	public abstract boolean equals(Triple p);
	/**
	 * Methode permettant la creation recursive d'un document XML représentant le système
	 * @return
	 */
	public abstract Element getXMLElement();
	/**
	 * Methode récursive permettant de générer le système à partir d'un {@link Element} xml.
	 * @param xmlElement
	 */
	public abstract void generateFromXML(Element xmlElement);
	/**
	 * Méthode permettant d'obtenir une vue compréhensible de la condition (utilisé pour labelliser les {@link RuleComposite})
	 * @return représentation de la condition au format String
	 */
	public abstract String getHumanReadable();
	/**
	 * Methode récursive récupérant les donnes utilisé dans tout le système
	 * @param listeUsedVar
	 */
	public abstract void getUsedVar(List<String> listeUsedVar);
	
}
